﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using QldtSdh.DAL.Models;

namespace QldtSdh.BLL
{
    public partial class BizChuyenNganhDaoTao
    {
        /// <summary>
        /// Lấy danh sách tất cả các chuyên ngành đào tạo
        /// </summary>
        /// <returns></returns>
        public static List<NganhDaoTao> GetList()
        {
            using (var db = QldtSdh.DAL.Models.CEMS4UG_DHKHContext.GetContext())
            {
                return db.NganhDaoTaoDbSet.OrderBy(e => e.MaNganhDaoTao).ToList();
            }
        }

        public static NganhDaoTao GetByID(string guidIdNganh)
        {
            using (var db = QldtSdh.DAL.Models.CEMS4UG_DHKHContext.GetContext())
            {
                return db.NganhDaoTaoDbSet.Where(e => e.MaNganhDaoTaoGUID == guidIdNganh).FirstOrDefault();
            }
        }

        public static bool IsExistByID(string guidIdNganh)
        {
            using (var db = QldtSdh.DAL.Models.CEMS4UG_DHKHContext.GetContext())
            {
                return db.NganhDaoTaoDbSet.Where(e => e.MaNganhDaoTaoGUID == guidIdNganh).FirstOrDefault() == null ? false : true;
            }
        }

        /// <summary>
        /// Kiểm tra Mã cơ sở đào tạo có tồn tại hay không
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public static bool IsExistByCode(string maNganh)
        {
            using (var db = QldtSdh.DAL.Models.CEMS4UG_DHKHContext.GetContext())
            {
                return db.NganhDaoTaoDbSet.Where(e => e.MaNganhDaoTao == maNganh).FirstOrDefault() == null ? false : true;
            }
        }

        /// <summary>
        /// Kiểm tra tên cơ sở đào tạo có trùng hay không
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public static bool IsExistByName(string tenNganh)
        {
            using (var db = QldtSdh.DAL.Models.CEMS4UG_DHKHContext.GetContext())
            {
                return db.NganhDaoTaoDbSet.Where(e => e.TenNganhDaoTao == tenNganh).FirstOrDefault() == null ? false : true;
            }
        }

        public static CODE_RESULT_RETURN Add(NganhDaoTao obj)
        {
            using (var db = QldtSdh.DAL.Models.CEMS4UG_DHKHContext.GetContext())
            {
                var _nganh = db.NganhDaoTaoDbSet.Where(e => e.MaNganhDaoTao == obj.MaNganhDaoTao || e.MaSoNganhDaoTao == obj.MaSoNganhDaoTao).FirstOrDefault();
                if (_nganh != null)
                    return CODE_RESULT_RETURN.MaTrung;
                _nganh = db.NganhDaoTaoDbSet.Where(e => e.TenNganhDaoTao == obj.TenNganhDaoTao).FirstOrDefault();
                //if (_nganh != null)
                //    return CODE_RESULT_RETURN.TenTrung;
                obj.MaNganhDaoTaoGUID = obj.MaNganhDaoTao;
                db.NganhDaoTaoDbSet.Add(obj);
                db.SaveChanges();
                NhatKyHoatDong nhatKy = new NhatKyHoatDong();
                BizNhatKyHoatDong.InitData<NganhDaoTao>(nhatKy, null, obj.MaNganhDaoTaoGUID, LOAIDOITUONG.CHUYÊN_NGÀNH_ĐÀO_TẠO, LOAITHAOTAC.Thêm);
                BizNhatKyHoatDong.Add<NganhDaoTao>(nhatKy, obj);
                return CODE_RESULT_RETURN.ThanhCong;
            }
        }

        public static CODE_RESULT_RETURN Update(NganhDaoTao obj)
        {
            using (var db = QldtSdh.DAL.Models.CEMS4UG_DHKHContext.GetContext())
            {
                var _nganh = db.NganhDaoTaoDbSet.Where(e => e.MaNganhDaoTao == obj.MaNganhDaoTao && e.MaNganhDaoTaoGUID != obj.MaNganhDaoTaoGUID).FirstOrDefault();
                if (_nganh != null)
                    return CODE_RESULT_RETURN.MaTrung;
                //_nganh = db.NganhDaoTaoDbSet.Where(e => e.TenNganhDaoTao == obj.TenNganhDaoTao && e.MaNganhDaoTaoGUID != obj.MaNganhDaoTaoGUID).FirstOrDefault();
                //if (_nganh != null)
                //    return CODE_RESULT_RETURN.TenTrung;
                _nganh = db.NganhDaoTaoDbSet.Where(e => e.MaNganhDaoTaoGUID == obj.MaNganhDaoTaoGUID).FirstOrDefault();
                if (_nganh != null)
                {
                    NhatKyHoatDong nhatKy = new NhatKyHoatDong();
                    BizNhatKyHoatDong.InitData<NganhDaoTao>(nhatKy, _nganh, obj.MaNganhDaoTaoGUID, LOAIDOITUONG.CHUYÊN_NGÀNH_ĐÀO_TẠO, LOAITHAOTAC.Chỉnh_sửa);

                    _nganh.MaNganhDaoTao = obj.MaNganhDaoTao;
                    _nganh.TenNganhDaoTao = obj.TenNganhDaoTao;
                    _nganh.MoTa = obj.MoTa;
                    _nganh.MaDonViPhuTrachGUID = obj.MaDonViPhuTrachGUID;
                    _nganh.MaSoNganhDaoTao = obj.MaSoNganhDaoTao;
                    //_nganh.DanhChoNCS = obj.DanhChoNCS;
                    db.SaveChanges();
                    BizNhatKyHoatDong.Add<NganhDaoTao>(nhatKy, _nganh);
                    return CODE_RESULT_RETURN.ThanhCong;
                }
                else
                    return CODE_RESULT_RETURN.ThatBai;
            }
        }

        public static CODE_RESULT_RETURN Delete(string guidIdNganh)
        {
            using (var db = QldtSdh.DAL.Models.CEMS4UG_DHKHContext.GetContext())
            {
                var _nganh = db.NganhDaoTaoDbSet.Where(e => e.MaNganhDaoTaoGUID == guidIdNganh).FirstOrDefault();
                if (_nganh != null)
                {
                    if (!(_nganh.KhoaHoc_NganhDaoTao != null && _nganh.KhoaHoc_NganhDaoTao.Count > 0))
                    {
                        db.NganhDaoTaoDbSet.Remove(_nganh);
                        db.SaveChanges();
                        NhatKyHoatDong nhatKy = new NhatKyHoatDong();
                        BizNhatKyHoatDong.InitData<NganhDaoTao>(nhatKy, _nganh, _nganh.MaNganhDaoTaoGUID, LOAIDOITUONG.CHUYÊN_NGÀNH_ĐÀO_TẠO, LOAITHAOTAC.Xóa);
                        BizNhatKyHoatDong.Add<NganhDaoTao>(nhatKy, null);
                        return CODE_RESULT_RETURN.ThanhCong;
                    }
                    else
                        return CODE_RESULT_RETURN.ThatBai;
                }
                else
                    return CODE_RESULT_RETURN.ThatBai;
            }
        }
    }

}
